package com.cskaoyan.javase.oop2._1extends._10final._2method;
/**
 * final修饰方法表示"最终的,最后的方法"
 * 表示方法不能够被重写,但是方法继承仍然正常进行
 *
 * 以成员方法的final修饰为例子,语法是:
 * [访问权限修饰符] final 返回值类型 方法名(形参列表){
 *     // 方法体
 * }
 * 什么样的成员方法应该设置为final呢？
 *      1.方法的设计已经比较完善，不需要子类进行修改了，子类只需要乖乖继承,使用父类的实现即可.
 *      2.比如一旦修改就会导致问题、bug等时，就可以设置为final修饰。
 *      3.即便是父类的方法不是很完善，但只要是希望子类不要改写方法都可以这么做。（要么你就用，不爽你就自己实现一个）
 *      日常开发，程序员还是比较少见有需要把方法设置成final修饰的。同样比较多见于JDK源码中，比较常见的有：像Object类中的getClass()方法还有其中和线程相关的方法。
 *
 *
 * 一些特殊的方法:
 *      1.私有方法能不能被final修饰呢? 可以,但是这么做没意义
 *      2.静态方法能不能被final修饰呢? 可以,但是这么做没意义
 *      3.构造器能不能被final修饰呢?不能
 *
 *
 * @since 10:42
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        s.test();
    }
}
class Person{
    public final void eat(){
        System.out.println("好好吃饭");
    }

    // 'private' method declared 'final'是没有意义的
    private final void test2(){}

    public final static void test3(){}

    // public final Person() {
    // }
}
class LaoBa extends Person{
    /*@Override
    public void eat() {
        System.out.println("秘制小汉堡!");
    }*/
}
class Father{
    public final void test(){
        System.out.println("father");
    }
}
class Son extends Father{

    // 被final修饰的方法不能够重写
    /*@Override
    public void test() {
        System.out.println("son");
    }*/
}
